package socratesteam.view.managedBean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;

import socratesteam.model.dominio.Aviso;
import socratesteam.model.dominio.Categoria;
import socratesteam.model.dominio.Usuario;
import socratesteam.model.excepcion.DAOExcepcion;
import socratesteam.model.negocio.AvisoImpl;
import socratesteam.model.negocio.CategoriaImpl;
import socratesteam.model.negocio.UsuarioImpl;

@ManagedBean(name = "adminBean")
@SessionScoped
public class AdministrarBean extends BaseBean {

	private static final long serialVersionUID = 8605837612784203610L;

	UsuarioImpl getUsuarioImpl = new UsuarioImpl();
	AvisoImpl getAvisoImpl = new AvisoImpl();
	CategoriaImpl getCategoriaImpl = new CategoriaImpl();

	private String accion = "L";
	private Usuario obUsuario;
	private Aviso oAviso = new Aviso();
	private Categoria oCategoria;
	private List<Usuario> lstUsuarios = new ArrayList<Usuario>();
	private List<Aviso> lstAvisos = new ArrayList<Aviso>();
	private List<Categoria> lstCategorias = new ArrayList<Categoria>();

	/* begin getter & setter */

	public void nuevaCategoria() {
		oCategoria = new Categoria();
	}

	public List<Categoria> getLstCategorias() {
		return lstCategorias;
	}

	public void setLstCategorias(List<Categoria> lstCategorias) {
		this.lstCategorias = lstCategorias;
	}

	public Aviso getNuevoAviso() {
		return new Aviso();
	}

	public void nuevoAviso() {
		oAviso = new Aviso();
	}

	public Usuario getNuevoUsuario() {
		return new Usuario();
	}

	public void nuevoUsuario() {
		obUsuario = new Usuario();
	}

	public Usuario getObUsuario() {
		return obUsuario;
	}

	public void setObUsuario(Usuario obUsuario) {
		this.obUsuario = obUsuario;
	}

	public List<Usuario> getLstUsuarios() {
		return lstUsuarios;
	}

	public void setLstUsuarios(List<Usuario> lstUsuarios) {
		this.lstUsuarios = lstUsuarios;
	}

	public Aviso getoAviso() {
		return oAviso;
	}

	public void setoAviso(Aviso oAviso) {
		this.oAviso = oAviso;
	}

	public List<Aviso> getLstAvisos() {
		return lstAvisos;
	}

	public void setLstAvisos(List<Aviso> lstAvisos) {
		this.lstAvisos = lstAvisos;
	}

	public String getAccion() {
		return accion;
	}

	public void setAccion(String accion) {
		this.accion = accion;
	}

	public Categoria getoCategoria() {
		return oCategoria;
	}

	public void setoCategoria(Categoria oCategoria) {
		this.oCategoria = oCategoria;
	}

	/* end getter and setter */

	/* ACCIONES */

	public void abrirListarUsuarios() {
		obUsuario = new Usuario();
		listarUsuarios();
	}

	public void listarUsuarios() {
		try {
			lstUsuarios = getUsuarioImpl.listarUsuarios();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void buscarPersona() {
		try {
			getUsuarioImpl.buscarPersona(obUsuario);
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
	}

	public void registrarUsuario() {
		try {
			getUsuarioImpl.insertar(obUsuario);
			msg(obUsuario.getTipoMensaje(), obUsuario.getMensaje());
			listarUsuarios();
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
	}

	public void abrirListarAvisos() {
		oAviso = new Aviso();
		listarAvisos();
	}

	public void listarAvisos() {
		try {
			lstAvisos = getAvisoImpl.listarAvisos();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void registrarAviso() {
		try {
			getAvisoImpl.insertar(oAviso);
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
	}

	public void listarCategorias() {
		try {
			lstCategorias = getCategoriaImpl.listarCategorias();
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
	}
	
	public void registrarCategoria(){
		try {
			getCategoriaImpl.insertar(oCategoria);
			listarCategorias();
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
	}

	private List<Categoria> buscarCategoria(Categoria oCategoria) {
		List<Categoria> list = new ArrayList<Categoria>();
		try {
			list = getCategoriaImpl.comboCategorias(oCategoria);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

	public SelectItem[] getCboCategoria() {
		Categoria oCategoria = new Categoria();
		oCategoria.setCodigoPadre(0);
		List<Categoria> lst = buscarCategoria(oCategoria);
		SelectItem[] items = new SelectItem[lst.size()];
		int i = 0;
		for (Categoria o : lst) {
			items[i++] = new SelectItem(o.getCodigo(), o.getNombre());
		}
		return items;
	}

	public SelectItem[] getCboSubCategoria() {
		Categoria oCategoria = new Categoria();
		List<Categoria> lst = buscarCategoria(oCategoria);
		SelectItem[] items = new SelectItem[lst.size()];
		int i = 0;
		for (Categoria o : lst) {
			items[i++] = new SelectItem(o.getCodigo(), o.getNombre());
		}
		return items;
	}

}
